// pages/cart/index.js
import { showModal,showToast } from "../../utils/opensetting"
Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 地址信息
    adress: {},
    // 购物车
    cart: [],
    // 全选状态
    allChecked: false,
    // 总价格
    totalPrice: 0,
    // 总数量
    totalNum: 0
  },
  onShow() {
    this.cartinit()
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {},
  handleChooseAddress() {
    // 获取收货地址
    wx.chooseAddress({
      success: (address) => {
        address.all =
          address.provinceName +
          address.cityName +
          address.countyName +
          address.detailInfo
        // 把adress储存到本地
        wx.setStorageSync("address", address)
      }
    })
  },
  cartinit() {
    // 1 获取缓存中的收货地址
    const address = wx.getStorageSync("address")
    // 2 获取缓存中的购物车数据
    const cart = wx.getStorageSync("cart") || []
    this.setData({ address })
    this.setCart(cart)
  },
  // 商品单选事件
  handleItemChange(e) {
    // 获取被修改的商品id
    const goods_id = e.currentTarget.dataset.id
    // 获取购物车数组
    let { cart } = this.data
    // 找到被修改的商品对象
    let index = cart.findIndex((v) => v.goods_id === goods_id)
    // 选中状态取反
    cart[index].checked = !cart[index].checked

    this.setCart(cart)
  },
  // 商品全选功能
  handleItemAllCheck() {
    // 1 获取data中的数据
    let { cart, allChecked } = this.data
    // 2 修改值
    allChecked = !allChecked
    // 3 循环修改cart数组中的商品选中状态
    cart.forEach((v) => (v.checked = allChecked))
    // 4 把修改后的值，填充回data或者缓存中
    this.setCart(cart)
  },
  // 商品数量的编辑
  async handleItemNumEdit(e) {
    // 1 获取传递过来的id和操作类型
    const { operation, id } = e.currentTarget.dataset
    // 2 获取购物车数组
    let { cart } = this.data
    // 3 找到需要修改的商品索引
    const index = cart.findIndex((v) => v.goods_id === id)
    //  判断是否要执行删除
    if (cart[index].num === 1 && operation === -1) {
      // 弹窗提示
      const res = await showModal({ content: "您确定要删除吗？" })
      if (res.confirm) {
        cart.splice(index, 1)
        this.setCart(cart)
      } else if (res.cancel) {
        console.log("用户点击取消")
      }
    } else {
      // 4 进行修改数量
      cart[index].num += operation
      // 5 设置回缓存和data中
      this.setCart(cart)
    }
  },
  // 设置购物车状态，同时计算底部工具栏的数据、全选、总价格、购买的数量
  setCart(cart) {
    let allChecked = true
    // 计算总价格,总数量
    let totalPrice = 0
    let totalNum = 0
    if (cart.length === 0) {
      allChecked = false
    } else {
      cart.forEach((v) => {
        if (v.checked) {
          totalPrice += v.num * v.goods_price
          totalNum += v.num
        } else {
          allChecked = false
        }
      })
    }
    // 把购物车数据重新设置回data中和缓存中
    this.setData({
      cart,
      totalPrice,
      totalNum,
      allChecked
    })
    wx.setStorageSync("cart", cart)
  },
  // 点击结算
  async handlePay() {
    // 1 判断收货地址
    const { address, totalNum } = this.data
    if (!address.userName) {
      await showToast({ title: "您还没有选择收货地址!" })
      return
    }
    // 2 判断用户有没有选购商品
    if (totalNum === 0) {
      await showToast({ title: "您还没有选择商品" })
      return
    }
    // 3 跳转到支付界面
    wx.navigateTo({
      url: "/pages/pay/index"
    })
  }
})
